package particle;

import processing.core.PApplet;

public class RadialGradient extends PApplet{
	
	public void setup(){
		  size(200, 200);
		  background(255);
		  smooth();

		  // create a simple table of gradients
		  int columns = 4;
		  int radius = (width/columns)/2;
		  // create some gradients
		  noStroke();
		  for (int i=radius; i< width; i+=radius*2){
		    for (int j =radius; j< height; j+=radius*2){
		      createGradient(i, j, radius, color(0, 0, 0), color(255, 255, 255));
		    }
		  }
		}

		void createGradient (float x, float y, float radius, int c1, int c2){
		  float px = 0, py = 0, angle = 0;

		  // calculate differences between color components 
		  float deltaR = red(c2)-red(c1);
		  float deltaG = green(c2)-green(c1);
		  float deltaB = blue(c2)-blue(c1);
		  // hack to ensure there are no holes in gradient
		  // needs to be increased, as radius increases
		  float gapFiller = 8.0F;

		  for (int i=0; i< radius; i++){
		    for (float j=0; j<360; j+=1.0/gapFiller){
		      px = x+cos(radians(angle))*i;
		      py = y+sin(radians(angle))*i;
		      angle+=1.0/gapFiller;
		      int c = color(
		      (red(c1)+(i)*(deltaR/radius)),
		      (green(c1)+(i)*(deltaG/radius)),
		      (blue(c1)+(i)*(deltaB/radius)) 
		        );
		      set( (int)(px), (int)(py), c);      
		    }
		  }
		  // adds smooth edge 
		  // hack anti-aliasing
		  noFill();
		  strokeWeight(3);
		  ellipse(x, y, radius*2, radius*2);
		}



}
